package org.csu.mypetstoreplus.service;

import org.csu.mypetstoreplus.entity.CartItem;
import org.csu.mypetstoreplus.entity.Inventory;
import org.csu.mypetstoreplus.entity.Item;
import org.csu.mypetstoreplus.entity.Product;
import org.csu.mypetstoreplus.persistence.CartItemDao;
import org.csu.mypetstoreplus.persistence.InventoryDao;
import org.csu.mypetstoreplus.persistence.ItemDao;
import org.csu.mypetstoreplus.persistence.ProductDao;
import org.csu.mypetstoreplus.util.ThreadLocalUtil;
import org.csu.mypetstoreplus.vo.CartItemVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Service
public class CartService {

    @Autowired
    private CartItemDao cartItemDao;
    @Autowired
    private ItemDao itemDao;
    @Autowired
    private InventoryDao inventoryDao;
    @Autowired
    private ProductDao productDao;

    public List<CartItemVO> getCart() {
        Map<String,Object> map = ThreadLocalUtil.get();
        String username = (String) map.get("username");
        List<CartItem> cartItems = cartItemDao.findByUsername(username);
        List<CartItemVO> cartItemVOs = new ArrayList<>();
        for (CartItem cartItem : cartItems) {
            Item item = itemDao.findByItemId(cartItem.getItemId());
            Inventory inventory = inventoryDao.findByItemId(cartItem.getItemId());
            Product product = productDao.findByProductId(item.getProductId());
            CartItemVO cartItemVO = new CartItemVO(cartItem, item, product, inventory);
            if(cartItemVO.getQuantity()>0) cartItemVOs.add(cartItemVO);
        }
        return cartItemVOs;
    }

    public void deleteCart() {
        Map<String,Object> map = ThreadLocalUtil.get();
        String username = (String) map.get("username");
        cartItemDao.deleteByUsername(username); //假删除，设置quantity值为0，依然保留记录
    }

    public void addCartItem(String itemId, int quantity) {
        Map<String,Object> map = ThreadLocalUtil.get();
        String username = (String) map.get("username");
        CartItem cartItem = cartItemDao.findByUsernameAndItemId(username, itemId);
        if(cartItem==null) {
            //Cart中不存在，新增一条CartItem记录
            cartItem = new CartItem();
            cartItem.setItemId(itemId);
            String productId = itemDao.findByItemId(cartItem.getItemId()).getProductId();
            cartItem.setProductId(productId);
            cartItem.setUsername(username);
            cartItem.setQuantity(quantity);
        } else {
            //Cart中存在，原来quantity加新增量
            cartItem.setQuantity(cartItem.getQuantity()+quantity);
        }
        cartItemDao.save(cartItem);
    }

    public void updateCartItem(String itemId, int quantity) {
        Map<String,Object> map = ThreadLocalUtil.get();
        String username = (String) map.get("username");
        CartItem cartItem = cartItemDao.findByUsernameAndItemId(username, itemId);
        if(quantity>=0) cartItem.setQuantity(quantity);
        cartItemDao.save(cartItem);
    }
}
